class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        //边界情况
        if(head==nullptr)   return nullptr;
        //构建带头节点(虚拟头)
        ListNode* dummy=new ListNode(-1);
        dummy->next=head;

        //双指针
        ListNode* prev=dummy;
        ListNode* cur=dummy->next;
        //遍历
        while(cur!=nullptr)
        {
            //删除
            if(cur->val==val)
            {
                prev->next=cur->next;       //核心代码:跳过当前节点
                cur=prev->next;
            }
            else
            {
                prev=prev->next;
                cur=cur->next;
            }
        }
        return dummy->next; //返回虚拟节点的下一个

    }
};